package com.example.play.util;

import java.util.HashMap;
import java.util.Map;

/**
 * @author wsl
 * @version 1.0
 * @date 2020/5/11
 * @description 这是获取最大最小经纬度的工具类
 */

public class LngLatUtil {
    /**
     * 获取当前用户一定距离以内的经纬度值
     * 单位米 return minLat
     * 最小经度 minLng
     * 最小纬度 maxLat
     * 最大经度 maxLng
     * 最大纬度 minLat
     */
    public static Map getAround(String latStr, String lngStr, Double raidus) {
        Map map = new HashMap (1);
        // 传值给经度
        Double latitude = Double.parseDouble (latStr);
        // 传值给纬度
        Double longitude = Double.parseDouble (lngStr);
        // 获取每度
        Double degree = (24901 * 1609) / 360.0;

        Double mpdLng = Double.parseDouble ((degree *
                Math.cos (latitude * (Math.PI / 180)) + "").replace ("-", ""));
        Double dpmLng = 1 / mpdLng;
        Double radiusLng = dpmLng * raidus;
        //获取最小经度
        Double minLng = longitude - radiusLng;
        // 获取最大经度
        Double maxLng = longitude + radiusLng;

        Double dpmLat = 1 / degree;
        Double radiusLat = dpmLat * raidus;
        // 获取最小纬度
        Double minLat = latitude - radiusLat;
        // 获取最大纬度
        Double maxLat = latitude + radiusLat;

        map.put ("minLat", minLat);
        map.put ("maxLat", maxLat);
        map.put ("minLng", minLng);
        map.put ("maxLng", maxLng);

        return map;
    }

    /**
     * 判断是否在范围内
     *
     * @param maxLat   最大纬度
     * @param maxLng   最大经度
     * @param minLat   最小纬度
     * @param minLng   最小经度
     * @param checkLat 纬度
     * @param checkLng 经度
     * @return
     */
    public static boolean checkIsInArea(String maxLat, String maxLng, String minLat, String minLng, String checkLat, String checkLng) {
        Double maxLatD = Double.parseDouble (maxLat);
        Double minLatD = Double.parseDouble (minLat);
        Double maxLngD = Double.parseDouble (maxLng);
        Double minLngD = Double.parseDouble (minLng);
        Double latitude2 = Double.parseDouble (checkLat);
        Double longitude2 = Double.parseDouble (checkLng);
        System.out.println ("maxLatD===" + maxLatD + "maxLngD==" + maxLngD + "minLatD==" + minLatD + "minLngD===" + minLngD + "latitude2===" + latitude2 + "longitude2==" + longitude2);
        if (latitude2 >= minLatD && latitude2 <= maxLatD && longitude2 >= minLngD && longitude2 <= maxLngD) {
            System.out.println ("latitude2 >= minLatD" + (latitude2 >= minLatD));
            System.out.println ("latitude2 <= maxLatD" + (latitude2 <= maxLatD));
            System.out.println ("longitude2 >= minLngD" + (longitude2 >= minLngD));
            System.out.println ("longitude2 <= maxLngD" + (longitude2 <= maxLngD));
            return true;
        }
        return false;
    }
}
